#!/bin/bash
# 自动部署脚本：拉取代码、构建后端、重启 docker 服务并导入数据库

set -e

# 自动加载 .env 文件中的环境变量
set -a
[ -f .env ] && . .env
set +a

DB_NAME=${MYSQL_DATABASE:-mdl}

echo "[1/5] 拉取 Gitee 最新代码..."
git pull
echo "代码已更新到最新版本。注意：目前执行的本脚本仍然是拉取之前的 deploy.sh 版本，如遇到问题，请重新执行。"

echo "[2/5] 构建 Spring Boot 后端..."
./mvnw clean package -DskipTests

echo "[3/5] 重启 docker compose 服务..."
docker-compose down
docker-compose up -d --build

MYSQL_CONTAINER=$(docker ps -qf "name=mdl-mysql")
if [ -z "$MYSQL_CONTAINER" ]; then
  echo "未找到名为 mdl-mysql 的 MySQL 容器，请检查 docker-compose 配置和容器状态。"
  docker ps
  exit 1
fi

echo "[4/5] 等待 MySQL 容器启动..."
MAX_WAIT=60
WAITED=0
while ! docker exec "$MYSQL_CONTAINER" mysqladmin ping -uroot -p"$MYSQL_ROOT_PASSWORD" --silent >/dev/null 2>&1; do
  sleep 2
  WAITED=$((WAITED + 2))
  if [ "$WAITED" -ge "$MAX_WAIT" ]; then
    echo "等待 MySQL 启动超时（${MAX_WAIT} 秒），请检查容器日志："
    docker logs "$MYSQL_CONTAINER"
    exit 1
  fi
done
echo "MySQL 已启动。"

if [ -f mdl.sql ]; then
  echo "[5/5] 导入数据库脚本 mdl.sql ..."

  if ! docker exec "$MYSQL_CONTAINER" mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then
    echo "错误：无法使用当前 MYSQL_ROOT_PASSWORD 连接 MySQL，请检查密码或容器状态。"
    exit 1
  fi

  if ! docker exec "$MYSQL_CONTAINER" mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "CREATE DATABASE IF NOT EXISTS \`$DB_NAME\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" >/dev/null 2>&1; then
    echo "错误：创建或检查数据库 $DB_NAME 失败，请查看 MySQL 日志。"
    exit 1
  fi

  echo "当前使用的数据库：$DB_NAME"
  if ! docker exec -i "$MYSQL_CONTAINER" mysql -uroot -p"$MYSQL_ROOT_PASSWORD" "$DB_NAME" < mdl.sql; then
    echo "错误：导入 mdl.sql 失败，请检查脚本内容和数据库状态。"
    exit 1
  fi
  echo "数据库导入完成。"
else
  echo "未检测到 mdl.sql，跳过数据库导入。"
fi

echo "部署完成。"
